#include<iostream>
using namespace std;
struct Day{
    Day(int _day)
    :val(_day)
    {}
    int val;
};


// struct Month{
//     Month(int _day)
//     :val(_day)
//     {}
//     int val;
// };

struct Year{
    Year(int _day)
    :val(_day)
    {}
    int val;
};

class Date{
    public:
    Date(const Month& m, const Day& d, const Year& y)
    {

    }

    private:
};

//修改让接口更容易使用:
class Month
{
    public:
    static Month Jan()
    {
        return Month(1);
    }
    static Month Feb()
    {
        return Month(1);
    }
    static Month Dec()
    {
        return Month(1);
    }
    private:
    explicit Month(int m);
};
// Date d4(Month::Jan(),Day(30),Year(1994));
int main()
{
    // Date d1(10,2,3);//错误
    // Date d2(Day(30),Month(3),Year(1999));//错误
    // Date d3(Month(9),Day(29),Year(1992));//正确
    Date d4(Month::Jan(),Day(30),Year(1994));
    return 0;
}